package br.com.tiespec.ejb.EjbInterface;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import br.com.tiespec.model.Enum.TipoSortOrder;
import br.com.tiespec.model.Modelo.ClientePortal;
import br.com.tiespec.model.Util.RNException;

/**
 * Interface para tratar a funcionalidade de Aprovação de Cliente de Portal 
 * @author Hermann Miertschink Neto
 */
public interface AprovacaoClientePortalInterface extends Serializable {
	
	
	/**
	 * Função para buscar os registros de cliente de portal que estão esperando aprovação.
	 * @param first Parâmetro de Paginação - Primeiro Registro a Ser Trazido
	 * @param pageSize Parâmetro de Paginação - Quantidade de registros a serem recuperados
	 * @param sortField Parâmetro de Paginação - Campo utilizado para ordenação
	 * @param sortOrder Parâmetro de Paginação - Tipo de Ordenação (DESC, ASC, null)
	 * @param varNome Parâmetro de Busca - (Parte d)O nome do Cliente de Portal
	 * @param varUsuario Parâmetro de Busca - (Parte d)O nome do Usuário responsável
	 * @param varCadastroDe Parâmetro de Busca - Data de Cadastro De
	 * @param varCadastroAte Parâmetro de Busca - Data de Cadastro Até
	 * @return Lista de Clientes de Portal que conferem com os parâmetros informados
	 * @throws RNException
	 */
	public abstract List<ClientePortal> listarClientePortal(int first, int pageSize,
			String sortField, TipoSortOrder sortOrder, String varNome,
			String varUsuario, Date varCadastroDe, Date varCadastroAte) throws RNException;

	
	/**
	 * Função de contagem de total de registros para os filtros informados
	 * @param varNome Parâmetro de Busca - (Parte d)O nome do Cliente de Portal
	 * @param varUsuario Parâmetro de Busca - (Parte d)O nome do Usuário responsável
	 * @param varCadastroDe Parâmetro de Busca - Data de Cadastro De
	 * @param varCadastroAte Parâmetro de Busca - Data de Cadastro Até
	 * @return Número de registros que conferem com os filtros informados
	 * @throws RNException
	 */
	public abstract Integer countClientePortal(String varNome, String varUsuario,
			Date varCadastroDe, Date varCadastroAte) throws RNException;

	
	/**
	 * Método utilizado para aprovar um cliente de portal. 
	 * Neste método será enviado ao usuário responsável um email com a senha de acesso, 
	 * além de ativar as instâncias de usuário e do cliente de portal.
	 * @param id Chave Primária do Cliente de Portal a ser aprovado
	 * @throws RNException 
	 */
	public abstract void aprovarClientePortal(Long id) throws RNException;
	
	
	/**
	 * Seleciona a instância de um cliente de portal
	 * @param id Chave Primária do Cliente de Portal a ser selecionado
	 * @return Uma instância do cliente de portal com o id informado
	 * @throws RNException
	 */
	public abstract ClientePortal selecionarClientePortal(Long id) throws RNException;
	
	
	/**
	 * Usado para selecionar um cliente de portal com os dados do responsável de criação do mesmo 
	 * @param id Chave Primária do Cliente de Portal a ser selecionado
	 * @return Uma instância do cliente de portal com o id informado
	 * @throws RNException
	 */
	public abstract ClientePortal selecionarClientePortalComResponsavel(Long id) throws RNException;
	
	
	/**
	 * Usado para selecionar um cliente de portal juntamente com a lista de seus usuários cadastrados.
	 * @param id Chave Primária do Cliente de Portal a ser selecionado
	 * @return Uma instância do cliente de portal com o id informado
	 * @throws RNException
	 */
	public abstract ClientePortal selecionarClientePortalComUsuarios(Long id) throws RNException;
	
}
